package com.example;

import com.fasterxml.jackson.databind.DatabindException;
import com.fasterxml.jackson.databind.ObjectMapper;

import java.io.File;
import java.io.IOException;
import java.lang.instrument.Instrumentation;
import java.util.ArrayList;
import java.util.LinkedHashMap;
import java.util.List;
import java.util.Map;

public class ApiCollectorAgent {

    public static void premain(String agentArgs, Instrumentation inst) {
        System.out.println("Agent 你好");

        // 存储 API 信息
        List<ApiInfo> apiInfos = new ArrayList<>();

        // 创建并注册 ApiClassFileTransformer
        ApiClassFileTransformer transformer = new ApiClassFileTransformer(apiInfos);
        inst.addTransformer(transformer);

        // 在 Agent 结束时，将 API 信息输出到文件
        Runtime.getRuntime().addShutdownHook(new Thread(() -> {
            try {
                // 将 List 转换为 Map
                Map<String, ApiInfo> apiMap = new LinkedHashMap<>();
                for (int i = 0; i < apiInfos.size(); i++) {
                    String key = "接口" + (i + 1);
                    apiMap.put(key, apiInfos.get(i));
                }

                // 使用 Jackson 将 apiMap 序列化并写入文件
                ObjectMapper objectMapper = new ObjectMapper();
                objectMapper.writerWithDefaultPrettyPrinter()
                        .writeValue(new File("api_info.json"), apiMap);
                System.out.println("API 信息已写入文件: api_info.json");
            } catch (Exception e) {
                e.printStackTrace();
                System.err.println("Failed to write API info to JSON file: " + e.getMessage());
            }
        }));
    }
}
